package v1

import (
	"devops-super/api"
	"devops-super/internal/model/entity"
	"devops-super/internal/model/mymodel"
	"github.com/gogf/gf/v2/frame/g"
)

// DeviceGetPageLstReq 分页获取设备列表请求
type DeviceGetPageLstReq struct {
	g.Meta `method:"get" path:"/device/page-list" summary:"分页获取设备列表" tags:"设备"`
	*api.PageLstReq
	DeviceNo   string   `json:"deviceNo"`
	Name       string   `json:"name"`
	OpenStatus string   `json:"openStatus"`
	Status     string   `json:"status"`
	ProductId  int64    `json:"productId"`
	DeptId     int64    `json:"deptId"`
	GroupId    int64    `json:"groupId"`
	TimeRange  []string `json:"timeRange"` // 时间范围[开始,结束]
}

// DeviceGetPageLstRes 分页获取设备列表响应
type DeviceGetPageLstRes struct {
	*api.PageLstRes[*mymodel.AppDeviceResponse]
}

// DeviceAddReq 新增设备请求
type DeviceAddReq struct {
	g.Meta         `method:"post" path:"/device" summary:"新增设备" tags:"设备"`
	DeviceNo       string  `v:"required#设备编号不能为空" json:"deviceNo"`
	Name           string  `v:"required#设备名称不能为空" json:"name"`
	ChannelNo      string  `json:"channelNo"`
	ProductId      int64   `v:"required#产品ID必须" json:"productId"`
	DeptId         uint64  `json:"deptId"`
	Type           int     `v:"required#设备类型必须" json:"type"`
	GroupId        uint64  `v:"required#分组ID必须" json:"groupId"`
	MqttServer     string  `json:"mqttServer"`
	DatabaseServer string  `json:"databaseServer"`
	OssServer      string  `json:"ossServer"`
	ParentId       uint64  `json:"parentId"`
	Remark         string  `json:"remark"`
	Lng            float64 `json:"lng"`
	Lat            float64 `json:"lat"`
	Address        string  `json:"address"`
	Image          string  `json:"image"`
	Version        string  `json:"version"`
	OpenStatus     int     `json:"openStatus"`
	NetworkType    int     `json:"networkType"`
}

// DeviceAddRes 新增设备响应
type DeviceAddRes struct{}

// DeviceUptReq 更新设备请求
type DeviceUptReq struct {
	g.Meta         `method:"put" path:"/device/{id}" summary:"更新设备" tags:"设备"`
	Id             int     `v:"min:1#设备ID必须" path:"id"`
	DeviceNo       string  `v:"required#设备编号不能为空" json:"deviceNo"`
	Name           string  `v:"required#设备名称不能为空" json:"name"`
	ChannelNo      string  `json:"channelNo"`
	ProductId      int64   `v:"required#产品ID必须" json:"productId"`
	DeptId         uint64  `json:"deptId"`
	Type           int     `v:"required#设备类型必须" json:"type"`
	GroupId        uint64  `v:"required#分组ID必须" json:"groupId"`
	MqttServer     string  `json:"mqttServer"`
	DatabaseServer string  `json:"databaseServer"`
	OssServer      string  `json:"ossServer"`
	ParentId       uint64  `json:"parentId"`
	Remark         string  `json:"remark"`
	Lng            float64 `json:"lng"`
	Lat            float64 `json:"lat"`
	Address        string  `json:"address"`
	Image          string  `json:"image"`
	Version        string  `json:"version"`
	OpenStatus     int     `json:"openStatus"`
	NetworkType    int     `json:"networkType"`
}

// DeviceUptRes 更新设备响应
type DeviceUptRes struct{}

// DeviceUptStatusReq 更新设备状态请求
type DeviceUptStatusReq struct {
	g.Meta     `method:"patch" path:"/device/{id}/status" summary:"更新设备状态" tags:"设备"`
	Id         int `v:"min:1#设备ID必须" path:"id"`
	OpenStatus int `v:"required" json:"openStatus"`
}

// DeviceUptStatusRes 更新设备状态响应
type DeviceUptStatusRes struct{}

// DeviceDelReq 删除设备请求
type DeviceDelReq struct {
	g.Meta `method:"delete" path:"/device/{id}" summary:"删除设备" tags:"设备"`
	Id     int `v:"min:1#设备ID必须" path:"id"`
}

// DeviceDelRes 删除设备响应
type DeviceDelRes struct{}

// DeviceGetOneReq 获取单条设备请求
type DeviceGetOneReq struct {
	g.Meta `method:"get" path:"/device/getOne" summary:"获取单条设备" tags:"设备"`
	Id     int `v:"min:1#设备ID必须" json:"id"`
}

// DeviceGetOneRes 获取单条设备响应
type DeviceGetOneRes struct {
	Info *entity.AppDevice `json:"info"`
}

// DeviceGetOptionsReq 获取设备选项请求
type DeviceGetOptionsReq struct {
	g.Meta        `method:"get" path:"/device/getOptions" summary:"获取设备选项" tags:"设备"`
	FieldKey      string `json:"fieldKey"`   // 自定义value字段
	FieldLabel    string `json:"fieldLabel"` // 自定义label字段
	DeptId        int64  `json:"deptId"`
	ProductId     int64  `json:"productId"`
	DeviceGroupId int64  `json:"deviceGroupId"`
	Type          string `json:"type"`
}

// DeviceGetOptionsRes 获取设备选项响应
type DeviceGetOptionsRes struct {
	Options []*api.FormOptionsItem `json:"options"`
}

// DeviceSendCmdReq 设备发送命令
type DeviceSendCmdReq struct {
	g.Meta   `method:"post" path:"/device/sendcmd" summary:"设备发送命令" tags:"设备"`
	DeviceNo string `v:"required#设备编号不能为空" json:"deviceNo"`
	Cmd      string `v:"required#cmd不能为空" json:"cmd"`
}

// DeviceSendCmdRes 设备发送命令响应
type DeviceSendCmdRes struct{}

// DeviceGetStateLogsReq 设备获取状态日志
type DeviceGetStateLogsReq struct {
	g.Meta   `method:"get" path:"/device/getStateLogs" summary:"设备状态日志" tags:"设备"`
	DeviceNo string `v:"required#设备编号不能为空" json:"deviceNo"`
}

// DeviceGetStateLogsRes 设备获取状态日志响应
type DeviceGetStateLogsRes struct {
	List []*entity.IotDeviceStateLog `json:"list"`
}

// DeviceGetAstLogsReq 设备获取AST日志
type DeviceGetAstLogsReq struct {
	g.Meta   `method:"get" path:"/device/getAstLogs" summary:"设备AST日志" tags:"设备"`
	DeviceNo string `v:"required#设备编号不能为空" json:"deviceNo"`
}

// DeviceGetAstLogsRes 设备获取AST日志响应
type DeviceGetAstLogsRes struct {
	List []*mymodel.IotDeviceAstLogResponse `json:"list"`
}

// DeviceGetCopiesReq 获取可复制设备
type DeviceGetCopiesReq struct {
	g.Meta   `method:"get" path:"/device/getCopies" summary:"获取可复制设备" tags:"设备"`
	DeviceNo string `v:"required#设备编号不能为空" json:"deviceNo"`
}

// DeviceGetCopiesRes 获取可复制设备响应
type DeviceGetCopiesRes struct {
	List []*entity.AppDevice `json:"list"`
}
